﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

#pragma once

#include "GcmpDwgDxfInterface.h"
#include <string>
#include "GcmpApiDeclaration.h"

namespace gcmp
{
    class IModelView;
    class IElement;
    class Vector3d;

    /// \brief 由用户定制某些特定element的导出接口。
    class GCMP_DWG_DXF_INTERFACE_EXPORT ISpecificElementExportCustomizer
    {
    public:
        ISpecificElementExportCustomizer() {};
        virtual ~ISpecificElementExportCustomizer() {};

        /// \brief 由用户判断某element是否应该导出。
        /// \param pElement 由用户判断是否需要导出的element。
        /// \return 返回true表示需要导出；返回false表示不需要导出。
        virtual bool ShouldExport(const IElement* pElement) const = 0;

        /// \brief 克隆一个用户自定义的特定element的导出接口。
        virtual OwnerPtr<ISpecificElementExportCustomizer> Clone() const = 0;

        /// \brief 由用户定制的对某些element的导出方法。
        /// \param pBlockTableRecord 需要导出的Element对应的BlockTableRecord（当前使用OdDbBlockTableRecord*类型）。
        /// \param pModelView 需要导出的element对应的ModelView。
        /// \param pElement 需要导出的element。
        /// \param basePoint 该element导出时相对基准点。
        /// \return 返回true表示导出成功；返回false表示导出失败。
        virtual bool ExportByCustomizedMethod(void* pBlockTableRecord, const IModelView* pModelView, const IElement* pElement, const gcmp::Vector3d& basePoint, std::wstring& errorMessage) const = 0;
    };

}


